package com.yiren.backstage.currency.utils;

import android.content.Context;

import java.text.DecimalFormat;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil {

    /*** 经纬度格式 */
    public static final String GPS_LATITUDE_LONGITUDE_FORMAT = "#.######°";

    /*** 速度格式 */
    public static final String GPS_SPEED_FORMAT = "#KM/h";

    /*** 里程格式 */
    public static final String GPS_MILEAE_FORMAT = "#KM";

    /*** 方位格式 */
    public static final String GPS_BEARING_FORMAT = "#°";

    /*** 转速格式#转/分 */
    public static final String RORATE_SPEED_FORMAT = "#转";

    /*** 成绩格式 */
    public static final String SCORE_FORMAT = "#分";

    /*** 换行符 */
    public static final String LINE_CHAR = "\r\n";

    /*** 制表位 */
    public static final String TAB_CHAR = "\t";

    /*** 换两行 */
    public static final String TWO_LINE_CHAR = "\r\n\r\n";

    /*** 高度格式 */
    public static final String GPS_ALTITUDE_FORMAT = "#.#米";

    /**
     * 小数点格式化 eg:"#.#"
     *
     * @param num
     * @param type
     * @return
     */
    public static String format(double num, String type) {
        DecimalFormat df = new DecimalFormat(type);
        return df.format(num);
    }

    /**
     * text中是否有符合pattern表达式
     *
     * @param pattern 正则表达式
     */
    public static boolean contains(String pattern, String text) {
        return Pattern.compile(pattern).matcher(text).find();
    }

    /**
     * 判断给定字符串是否空白串。 <br >
     * 空白串是指由空格、制表符、回车符、换行符组成的字符串<br >
     * 若输入字符串为null或空字符串，返回true
     *
     * @param input
     * @return boolean
     */
    public static boolean isEmpty(String input) {
        if (input == null || "".equals(input))
            return true;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
                return false;
            }
        }
        return true;
    }

    public static boolean isNothing(String input) {
        if (input == null || "".equals(input) || "null".equals(input))
            return true;
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
                return false;
            }
        }
        return true;
    }

  /*  public static String replaceSpaceLine(String str) {
        if (StringUtils.isNotBlank(str)) {
            str = str.replaceAll("[\\t\\n\\r]", "");
            return str;
        }
        return str;
    }*/

    /**
     * 将元数据前补零，补后的总长度为指定的长度，以字符串的形式返回
     *
     * @param sourceDate
     * @param formatLength
     * @return 重组后的数据
     */
    public static String addZero(int sourceDate, int formatLength) {
        // 0 指前面补充零 formatLength 字符总长度为 formatLength d 代表为正数。
        return String.format("%0" + formatLength + "d", sourceDate);
    }

    /**
     * 获取字符串资源文件
     *
     * @param context
     * @param id
     * @return
     */
    public static String getStringRes(Context context, int id) {
        return context.getString(id) == null ? "" : context.getString(id);
    }

    /**
     * 手机号码校验
     *
     * @param mobiles
     * @return
     */
    public static boolean isMobileNO(String mobiles) {
        // Pattern p =
        // Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
        Pattern p = Pattern.compile("^1\\d{10}$");
        Matcher m = p.matcher(mobiles);
        // logger.info(m.matches()+"---");
        return m.matches();
    }

    /**
     * 字符串转整数
     *
     * @param str
     * @param defValue
     * @return
     */
    public static int toInt(String str, int defValue) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defValue;
    }

    /**
     * 对象转整数
     *
     * @param obj
     * @return 转换异常返回 0
     */
    public static int toInt(Object obj) {
        if (obj == null)
            return 0;
        return toInt(obj.toString(), 0);
    }

    public static float getStringFloat(String string) {
        double d = getStringDouble(string);
        return (float) d;
    }

    public static int getStringInt(String string) {
        double d = getStringDouble(string);
        return (int) d;
    }


    public static double getStringDouble(String string) {
        try {
            return Double.parseDouble(string);
        } catch (Exception e) {
            return 0;
        }
    }

    public static byte[] hexStringToByte(String hex) {
        if (hex == null || hex.equals(""))
            return null;
        String[] array = hex.split(" ");
        byte[] data = new byte[array.length];
        try {
            for (int i = 0; i < array.length; i++) {
                if (array[i].length() > 2)
                    return null;
                int d = Integer.parseInt(array[i], 16);
                data[i] = (byte) (d & 0xff);
            }
        } catch (Exception e) {
            return null;
        }
        return data;
    }

    /**
     * 16进制求和
     *
     * @param data
     * @return
     */
    public static String makeChecksum(String data) {
        if (data == null || data.equals("")) {
            return "";
        }
        int total = 0;
        int len = data.length();
        int num = 0;
        while (num < len) {
            String s = data.substring(num, num + 2);
            total += Integer.parseInt(s, 16);
            num = num + 2;
        }
        /**
         * 用256求余最大是255，即16进制的FF
         */
        int mod = total % 256;
        String hex = Integer.toHexString(mod);
        len = hex.length();
        // 如果不够校验位的长度，补0,这里用的是两位校验
        if (len < 2) {
            hex = "0" + hex;
        }
        return hex;
    }

    public static String getProjectName(String name) {
        if (isNothing(name)) return "";
        return name.replace("100分", "").replace("10分", "");
    }

    /**
     * 生成UUID
     */
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }

}